const api = require('../../utils/api')

Page({
  data: {
    activeTab: 'login', // 当前激活的标签：login 或 register
    isLoading: false,
    loginForm: {
      username: '',
      password: ''
    },
    registerForm: {
      username: '',
      password: '',
      confirmPassword: '',
      phone: ''
    }
  },

  // 切换标签
  switchTab(e) {
    const tab = e.currentTarget.dataset.tab
    this.setData({ activeTab: tab })
  },

  // 登录表单输入处理
  onUsernameInput(e) {
    this.setData({
      'loginForm.username': e.detail.value
    })
  },

  onPasswordInput(e) {
    this.setData({
      'loginForm.password': e.detail.value
    })
  },

  // 注册表单输入处理
  onRegisterUsernameInput(e) {
    this.setData({
      'registerForm.username': e.detail.value
    })
  },

  onRegisterPasswordInput(e) {
    this.setData({
      'registerForm.password': e.detail.value
    })
  },

  onConfirmPasswordInput(e) {
    this.setData({
      'registerForm.confirmPassword': e.detail.value
    })
  },

  onPhoneInput(e) {
    this.setData({
      'registerForm.phone': e.detail.value
    })
  },

  // 处理登录
  async handleLogin() {
    const { username, password } = this.data.loginForm
    
    if (!username.trim()) {
      wx.showToast({
        title: '请输入账号',
        icon: 'none'
      })
      return
    }
    if (!password.trim()) {
      wx.showToast({
        title: '请输入密码',
        icon: 'none'
      })
      return
    }

    this.setData({ isLoading: true })

    try {
      const res = await api.login({
        username,
        password
      })

      if (res.success) {
        const app = getApp()
        // 存储用户信息和token
        wx.setStorageSync('token', res.data.token)
        wx.setStorageSync('userInfo', res.data)
        // 更新全局登录状态
        app.updateLoginStatus(true, res.data)
        
        wx.showToast({
          title: '登录成功',
          icon: 'success'
        })

        // 延迟返回，确保数据已经保存
        setTimeout(() => {
          const pages = getCurrentPages()
          if (pages.length > 1) {
            // 如果有上一页，返回上一页
            wx.navigateBack()
          } else {
            // 如果没有上一页，返回首页
            wx.switchTab({
              url: '/pages/index/index'
            })
          }
        }, 500)
      } else {
        wx.showToast({
          title: res.message || '登录失败',
          icon: 'none'
        })
      }
    } catch (error) {
      console.error('登录失败:', error)
      wx.showToast({
        title: '登录失败，请重试',
        icon: 'none'
      })
    } finally {
      this.setData({ isLoading: false })
    }
  },

  // 处理注册
  async handleRegister() {
    const { username, password, confirmPassword, phone } = this.data.registerForm
    
    // 表单验证
    if (!username.trim()) {
      wx.showToast({
        title: '请输入用户名',
        icon: 'none'
      })
      return
    }
    
    // 验证用户名长度
    if (username.length < 4 || username.length > 20) {
      wx.showToast({
        title: '用户名长度必须在4-20个字符之间',
        icon: 'none'
      })
      return
    }

    if (!password.trim()) {
      wx.showToast({
        title: '请输入密码',
        icon: 'none'
      })
      return
    }

    // 验证密码长度
    if (password.length < 6 || password.length > 20) {
      wx.showToast({
        title: '密码长度必须在6-20个字符之间',
        icon: 'none'
      })
      return
    }

    if (password !== confirmPassword) {
      wx.showToast({
        title: '两次密码不一致',
        icon: 'none'
      })
      return
    }

    // 验证手机号格式
    if (!/^1[3-9]\d{9}$/.test(phone)) {
      wx.showToast({
        title: '请输入正确的手机号',
        icon: 'none'
      })
      return
    }

    this.setData({ isLoading: true })

    try {
      const res = await api.register({
        username,
        password,
        phone
      })

      if (res.success) {
        wx.showToast({
          title: '注册成功',
          icon: 'success'
        })

        // 切换到登录标签
        setTimeout(() => {
          this.setData({
            activeTab: 'login',
            'loginForm.username': username
          })
        }, 1500)
      } else {
        wx.showToast({
          title: res.message || '注册失败',
          icon: 'none'
        })
      }
    } catch (error) {
      console.error('注册失败:', error)
      wx.showToast({
        title: error.message || '注册失败，请重试',
        icon: 'none'
      })
    } finally {
      this.setData({ isLoading: false })
    }
  }
}) 